import { CoursewareType, SourceType } from '@/api/Source/interface';
import { PaperBase } from '@/api/Source/Paper/interface';
/**
 * @desc 线下学习需要使用的位置信息
 */
interface PositionInfoDto {
  addressName: string;
  /**
   * @desc 经度
   */
  longitude: number;
  /**
   * @desc 纬度
   */
  latitude: number;
  /**
   * @desc 可打卡范围
   */
  scope: number;
  /**
   * @desc 地名
   */
  name: string;
}

/**
 * @desc 协会关联企业数据
 */
interface Ent {
  entName: string;
  entId: string;
}

/**
 * @desc 课件包复合数据
 */
interface Study extends SourceType {
  coursewareId: CoursewareType['coursewareId'];
  sourceGuid: CoursewareType['coursewareId'];
  type: CoursewareType['coursewareType'];
  /**
   * @desc 课件名称
   */
  name: string;
  /**
   * @desc 关联的分类,自己选择的课件是不会关联分类的
   */
  classId?: string;
  /**
   * @desc 视频内容转换
   */
  videoList?: {
    /**
     * @desc 视频id
     */
    hsVideoId: string;
    /**
     * @desc 视频封面地址
     */
    picUrl: string;
  }[];
  /**
   * @desc 图文的内容
   */
  picTextContent?: string;
  /**
   * @desc 封面地址
   */
  picUrl?: string;
}

interface Exam extends SourceType, Pick<PaperBase, 'name'> {
  coursewareId: CoursewareType['coursewareId'];
  sourceGuid: CoursewareType['coursewareId'];
  type: CoursewareType['coursewareType'];
}

// 计划内容列表item
export interface StudyPackage {
  studyList: Study[];
  examList: Exam[];
  /**
   * @desc 包来源 锁定值100
   */
  sourceType: string;
  /**
   * @desc 课件包的id
   */
  sourceGuid?: string;
  /**
   * @desc 课件包是通过课件包过来的还是通过选择课件组成的
   */
  packageType: string;
}

/**
 * @desc 固定时间特有字段
 */
export interface FixedField {
  /**
   * @desc 1必学 / 2选学
   */
  modelType: string;
  /**
   * @desc  100线上 200线下
   */
  studyMethod: string;
  /**
   * @desc 定位信息字段
   */
  positionInfoDto?: PositionInfoDto;
  /**
   * @desc 开始时间
   */
  startTime: string;
  /**
   * @desc 结束时间
   */
  endTime: string;
}

/**
 * @desc 周期学习才有的内容
 */
export interface CycleField {
  /**
   * @desc 每几日一学
   */
  cycleTime: number;

  courseRuleDto: {
    /**
     * @desc 学习机制 顺序200 随机100
     */
    studyModel: string;
  };

  courseEffectiveDto: {
    // 刷新的时间
    studyTime: string;
    // 生效时间类型 1, 当前是固定值
    effectiveType: '2';
    // 生效日期
    effectiveTime: string;
  };
}

export interface IsPublish {
  /**
   * @desc 是否发布
   */
  issue: boolean;
}

/**
 * @desc 学习对象,协会和企业的不同
 */
export interface StudyObject {
  /**
   * @desc 企业列表 协会才有
   */
  entList?: Ent[];

  /**
   * @desc 可能为字符串拼接的多选形式,协会多出两个学习类型 企业才有
   * [
   * { name: '企业法人', code: 1000 },
   * { name: '安全员', code: 1002 },
   * { name: '车队长', code: 1001 },
   * { name: '司机', code: 1004 },
   * { name: '环卫工人', code: 1006 }, // 协会
   * { name: '组长', code: 1005 } // 协会
   * ]
   */
  studyObject: string;

  /**
   * @desc 学习对象 协会才有
   * 1企业驾驶员
   * 2行业车型 --暂无
   * 3报名名单 --暂无
   * 4服务号
   */
  objectType?: string;

  /**
   * @desc 服务号范围 人员选择,当objectType=4
   *  [
   * { name: "全部范围人员", val: 0 },
   * { name: "管辖企业人员", val: 1 },
   * { name: "非管辖企业人员", val: 2 }
   * ]
   */
  serviceNumType?: string;

  /**
   * @desc 100所有(全平台) 200关注我的 300加入的 400指定对象
   * @desc 固定400指定对象 协会有
   */
  issueObjectType?: string;
}

/**
 * @desc 添加平台
 */
export interface AddSource {
  /**
   * @desc 平台 1企业2政协
   */
  addSource: string;
}

// 学习计划基础字段
export interface StudyPlan {
  /**
   * @desc 计划名称
   */
  title: string;
  /**
   * @desc 计划封面图
   */
  cover?: string;

  /**
   * @desc 计划分类 二级分类id
   */
  classId: string;

  /**
   * @desc 计划内容｜课件包列表
   */

  studyPackageList: StudyPackage[];
}

/**
 * @desc 证书类型
 */
interface Cert {
  certId: string;
  certType: string;
  certName: string;
}

/**
 * @desc 考试计划类型
 */
export interface ExamPlan {
  type: 300;
  startTime: string;
  endTime: string;
  relationId: string;
  certDto: Cert;
  title: string;
  questionTypeList: {
    //
    questionType: string;
    num: string;
  };
  repeatTimes: string;
}

export type StudyCyclePlan = StudyPlan & CycleField & StudyObject;

export type StudyFixedPlan = StudyPlan & FixedField & StudyObject;
